import time
import socket
import jwt

from send_medicine import settings


class JWT_Handler(object):
    def __init__(self):
        pass

    def sun_encode(self, data):
        """加密"""
        # payload 待加密的数据
        token_dict = {
            # 'iat': time.time(),  # 时间戳
            'data': data
        }
        # headers
        headers = {
            'alg': "HS256",  # 声明所使用的算法
        }
        # 调用jwt库,生成json web token
        """
        这里很奇怪，在本地jwt.encode之后是byte类型的，但是在服务器上是str类型的。
        所以在本地需要encode来将byte类型转为str类型
        """
        # 通过获取hostname来判断是否为服务器还是本机
        hostname = socket.gethostname()  # DESKTOP-8F829M6本机
        if hostname == 'DESKTOP-8F829M6':
            jwt_token = jwt.encode(token_dict,  # payload, 有效载体
                                   settings.SECRET_KEY,  # 进行加密签名的密钥
                                   algorithm="HS256",  # 指明签名算法方式, 默认也是HS256
                                   headers=headers  # json web token 数据结构包含两部分, payload(有效载体), headers(标头)
                                   ).decode('utf-8')  # python3 编码后得到 bytes, 再进行解码(指明解码的格式), 得到一个str
        else:
            jwt_token = jwt.encode(token_dict,  # payload, 有效载体
                                   settings.SECRET_KEY,  # 进行加密签名的密钥
                                   algorithm="HS256",  # 指明签名算法方式, 默认也是HS256
                                   headers=headers  # json web token 数据结构包含两部分, payload(有效载体), headers(标头)
                                   )  # python3 编码后得到 bytes, 再进行解码(指明解码的格式), 得到一个str

        return jwt_token

    def sun_decode(self, data):
        """解密"""
        try:
            jwt_data = jwt.decode(data, settings.SECRET_KEY, algorithms=['HS256'])
            return jwt_data
        except Exception as e:
            pass
